package ckw.gui.wizards;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

import ckw.database.Configuration;
import ckw.database.DatabaseManager;
import ckw.database.OKW;


// Klasa przydatna do dynamicznego zapelniania wizarda formularzami do wypelnienia danych konfiguracyjnych
/**
 * @author DoomThrower
 *
 */
public class ConfigurationInputGUI {
	private OKW okw;

	public OKW getOkw() {
		return okw;
	}

	// Konfiguracja bazodanowa
	private Configuration configuration;

	public Configuration getConfiguration() {
		return configuration;
	}

	private Group group;
	private Text ipText; // adres IP OKW
	private Text cipherKey; // klucz, wykorzystywany do szyfrowania komunikacji
							// na linii OKW <-> CKW
	private Text password; // haslo, potrzebne do odblokowania pliku
							// konfiguracyjnego podczas instalacji

	public ConfigurationInputGUI(Composite parent, OKW okw) {
		boolean isNew; // czy jest nowy w bazie
		// Inicjalizacja konfiguracji bazodanowej, w zaleznosci od tego, czy
		// znajduje sie juz w bazie
		this.okw = okw;
		if (this.okw.getConfiguration() != null && okw.getConfiguration().getId() != null) {
			DatabaseManager db = DatabaseManager.getInstance();
			configuration = db.get(Configuration.class, okw.getConfiguration().getId());
			isNew = false;
		} else {
			configuration = new Configuration();
			okw.setConfiguration(configuration);
			isNew = true;
		}
		
		// Powiazanie miedzy okw a plikiem konfiguracyjnym
		configuration.setIdentificationField(okw.getIdentificationField());

		group = new Group(parent, SWT.SHADOW_ETCHED_IN);
		group.setText(okw.getIdentificationField());

		int ncol = 2;
		GridLayout gridLayout = new GridLayout();
		gridLayout.numColumns = ncol;
		group.setLayout(gridLayout);

		// Adres IP
		new Label(group, SWT.NONE).setText("Adres IP:");
		ipText = new Text(group, SWT.BORDER);
		ipText.setText(isNew ? "" : configuration.getIp());
		ipText.setTextLimit(15);
		ipText.addKeyListener(new KeyListener() {
			
			public void keyReleased(KeyEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
			public void keyPressed(KeyEvent arg0) {
				// TODO Auto-generated method stub
				
			}
		});

		// Klucz szyfrujacy
		new Label(group, SWT.NONE).setText("Klucz szyfrujacy:");
		cipherKey = new Text(group, SWT.BORDER);
		cipherKey.setText(isNew ? "" : (configuration.getCipherKey() == null ? "" : configuration.getCipherKey()));
		
		// Haslo
		new Label(group, SWT.NONE).setText("Haslo do konfiguracji:");
		password = new Text(group, SWT.BORDER);
	}

	// Metody na potrzeby weryfikacji poprawnego wypelnienia formularzy
	// konfiguracyjnych
	public Group getGroup() {
		return group;
	}

	public Text getIpText() {
		return ipText;
	}

	public Text getCipherKeyText() {
		return cipherKey;
	}

	public Text getPasswordText() {
		return password;
	}
}